fedpool

Détection de piscines sur la base d’images aériennes

Raphaël Bubloz

Plan

Introduction

Littérature liée

Données / Méthodologie

Résultats

Conclusion

Introduction

Avec le changement climatique, l’usage de l’eau en été devient un enjeu croissant

Article du Temps

Les piscines (privées) sont souvent au cœur des débats

Introduction


Il n’y a pas de données centralisées en Suisse


Les piscines sont régies par le droit des constructions


Les données communales ne sont pas publiques (quand elles existent…)

Introduction

Nouvelles méthodes et données à disposition

Littérature liée


Séminaire basé sur deux “papiers”

  • Un rapport sur les aspects fiscaux

  • Un article sur les aspects techniques

Foncier innovant

Direction générale des Finances publiques. (2022). L’intelligence artificielle au service de la lutte contre la fraude : Bilan de l’expérimentation « Foncier innovant » (p. 9). https://www.impots.gouv.fr/sites/default/files/media/2_actu/home/2022/dp_foncier_innovant.pdf


Après une expérimentation dans 9 départements, plus de 20’000 piscines non déclarées ont été détectées

Recettes fiscales estimées à 10M € supplémentaires dans ces départements

Foncier innovant

Le projet a coûté 24M € sur 3 ans et devrait rapporter 40M € en une année pour la France (métropolitaine)


Peu de détails techniques si ce n’est que l’administration est accompagnée dans la mise en place, mais qu’elle garde la propriété intellectuelle des modèles


Utilisation uniquement des images aériennes publiques de l’IGN (sur un cloud)

Foncier innovant

Exemple de piscine détectée en France

Platform for Swimming Pool Detection

Sánchez San Blas, H., Carmona Balea, A., Sales Mendes, A., Silva, L. A., & Villarrubia González, G. (2023). A Platform for Swimming Pool Detection and Legal Verification Using a Multi-Agent System and Remote Image Sensing. International Journal of Interactive Multimedia and Artificial Intelligence, 8(4), 153. https://doi.org/10.9781/ijimai.2023.01.002


Améliorer un processus manuel (!) afin de détecter le 20% de piscines en Espagne qui ne seraient pas déclarées


Comparaison de différentes sources et architectures de modèles

Platform for Swimming Pool Detection

Google maps

Set d’entraînement (Planet?)

Platform for Swimming Pool Detection


Comparaison de 3 modèles de détection :

  • YOLOv4 (You Only Look Once)

  • Mask R-CNN (Mask Region-Based Convolutional Neural Network)

  • Detectron2


YOLO obtient les meilleurs résultats dans le cas d’usage

Platform for Swimming Pool Detection


YOLO est une architecture visant à accomplir de la détection d’image


Cela consiste à identifier l’emplacement des “objets” et à leur attribuer une classe


YOLO est un single-stage object detector, les objets et classes sont attribués pour l’image entière, elle ne passe donc qu’une fois dans le modèle

Platform for Swimming Pool Detection

Exemple du workflow YOLO (Sánchez San Blas et al., 2023)

Platform for Swimming Pool Detection


La tâche à effectuer est de la détection de classe unique (piscine)


Le jeu de données d’entraînement est composé de 999 images (799 train | 200 test) contenant 2300 piscines (1892 | 408)

Platform for Swimming Pool Detection

Métriques d’évaluation

Précision = \(\frac{TP}{TP + FP}\)

Recall = \(\frac{TP}{TP + FN}\)

F1 = \(2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}\)

La vitesse en FPS

L’Intersection over Union (IoU) (chevauchement des bounding boxes / la surface de leur union)

La mean average precision (mAP) (courbe de précision et recall en fonction de la confiance dans la détection)

Platform for Swimming Pool Detection

Calcul d’IoU (https://pyimagesearch.com, 2016)

Platform for Swimming Pool Detection

Platform for Swimming Pool Detection

Le reste de l’article contient la description du système dans lequel s’intègre la détection

Les conclusions sont que le modèle YOLOv4 est le plus approprié et que des ajustements peuvent être faits selon l’objectif à atteindre


Monter le seuil de confiance à 25% au lieu de 10% pour améliorer la précision et utiliser des images plus précises malgré le temps de calcul plus important

fedpool

Données


swissIMAGE 10cm de swisstopo


Orthophotos pour toute la Suisse, images de 1\(km^{2}\)


2 résolutions : 0.1 (~ 55 Mo/img, 2.4To en tout) et 2 mètres

Données

Extrait de Plan-les-Ouates, 0.1m, © swisstopo

Méthodologie


Objectif : Réaliser, en local, un pipeline permettant d’automatiser la récupération d’images, la détection de piscines et l’affichage du résultat sur une carte interactive


Profiter de l’entraînement du modèle pour télécharger et pré-traiter les images de façon réutilisable

Téléchargement des images


Via l’API Spatial Temporal Asset Catalog (STAC) de swisstopo


Téléchargement en indiquant une bounding box en coordonnées WGS84 (lat/long)


Données volumineuses –> Identifier des zones d’intérêt

Identification des zones d’intérêt


Quelques hypothèses sur la localisation des piscines :

  • Dans des zones avec densité de logements \(< 3000 / km^{2}\)

  • En dessous de 1’000 mètres d’altitude

  • Cibler les communes avec le plus de piscines
  • CAH pour faire des clusters de \(km^{2}\) identifiés adjacents

Préparation des images


Conserver l’information spatiale en nommant selon les coordonnées (suisses) EEEE-NNNN.tif


Redécoupage en image de 1’000x1’000 pixels (100x100 mètres) EEEEE-NNNNN.tif


Conversion de (geo)tiff à jpeg EEEEE-NNNNN.jpg

Labellisation des images


À l’aide de Label Studio (en local), 300 images labellisées manuellement


Annotation au “format YOLO”

[
 {class, x, y, width, height},
 {0, 0.25, 0.56, 0.2, 0.4}
]


Les images et les annotations ont le même nom (extensions .jpg et .txt)

Exemple d’annotation au format YOLO

Exemple d’annotation du projet

Architecture(s) YOLO en bref


Depuis la v5, YOLO vient avec différentes tailles de modèles (n, s, m, l, x)…et différentes versions (ex. YOLOv5 v6.0)


En très résumé, l’architecture est composée de l’ossature (backbone) et de la tête (head)

Le backbone prend en entrée l’image et en extrait la feature map

La head utilise les features maps pour faire les détections finales (bbox, classes, scores)

Post-traitement


Conversion des bounding boxes en une couche de polygones


Chargement des polygones dans une carte leaflet

Résultats

❌ Étape d’entraînement (pytorch)


Premier entraînement non échoué hier soir…mais présentation à terminer

Mes attentes | En vrai, un batch de validation

La réalité | Prédictions effectives du même batch

Difficultés avec le modèle


Une trentaine d’hyperparamètres ajustables


Data augmentation par défaut


Quelle architecture est la plus adaptée ?

Data augmentation par défaut | Batch de train

Difficultés pour la suite

Variance intra-classe

À quoi ressemblent les piscines sur les images ?

“Normale”

Bâchée

Couverte

Verte

Difficultés pour la suite

Piscine sur plusieurs images


Identifier les bounding boxes adjacentes à un bord


Identifier quelle image vient à la suite et ses bbox


Définir un seuil au-delà duquel joindre les bbox en un seul polygone

Conclusion


Introduction au traitement d’images

Beaucoup de difficultés…mais beaucoup de leçons apprises

Commencer par le modèle aurait été plus judicieux

https://github.com/Raphbub/fedpool